package base_classes;

import javax.activation.DataHandler;
import javax.mail.*;
import javax.mail.internet.*;
import javax.mail.util.ByteArrayDataSource;

import java.util.*;
import java.io.*;

import dao.KursDao;
import dao.VorlesungsverschiebungDao;


public class SendEmail extends CalObject{

// Konfiguration des Google mail Emailserver	
	
	String sender = "myschedulechange09@googlemail.com";
	String password = "fhdpms09";
	String host = "smtp.gmail.com";
	String port  = "465";
	
	private String to;
	private String subject;
	private String text;
	static StringBuffer attachement;

	File attachedfile; 
		
	private VorlesungsverschiebungDao vorlesungsverschiebungDao;
	private KursDao kursDao;
	
	public VorlesungsverschiebungDao getVorlesungsverschiebungDao() {
		return vorlesungsverschiebungDao;
	}

	public void setVorlesungsverschiebungDao(
			VorlesungsverschiebungDao vorlesungsverschiebungDao) {
		this.vorlesungsverschiebungDao = vorlesungsverschiebungDao;
	}

	public KursDao getKursDao() {
		return kursDao;
	}

	public void setKursDao(KursDao kursDao) {
		this.kursDao = kursDao;
	}

	public String getTo() {
		return to;
	}

	public void setTo(String to) {
		this.to = to;
	}

	public String getSubject() {
		return subject;
	}

	public void setSubject(String subject) {
		this.subject = subject;
	}

	public String getText() {
		return text;
	}

	public void setText(String text) {
		this.text = text;
	}

	public File getAttachedfile() {
		return attachedfile;
	}

	public void setAttachedfile(File attachedfile) {
		this.attachedfile = attachedfile;
	}

// Methode zum Senden der Email inkl. Anlage	
		public SendEmail(String to, String subject, String emailText, StringBuffer attachement, String datum) {

// Eigenschaften (z.B. Sender, Empfänger, Port etc.) für den Mailversand werden festgelegt 			
		Properties props = new Properties();
		
		props.put("mail.smtp.user",sender);
		props.put("mail.smtp.host", host);
		props.put("mail.smtp.port", port);
		props.put("mail.smtp.starttls.enable", "true");
		props.put("mail.smtp.auth", "true");
		props.put("mail.smtp.socketFactory.port", port);
		props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
		props.put("mail.smtp.socketFactory.fallback", "false");

					
	try	{

//Erlaubt durch die vorher definitierten props-Parameter Zugriff auf den SMTP Server		
		Authenticator auth = new SMTPAuthenticator();
		Session session = Session.getInstance(props, auth);
		
//Instanzierung einer MIME EMail Message		
		MimeMessage msg = new MimeMessage(session);

//Sender, Empfänger, Betreff und Text der Email werden spezifiziert		
		 msg.setFrom(new InternetAddress(sender));
		 msg.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
		 msg.setSubject(subject);
		 
     	 MimeBodyPart messageBodyPart = new MimeBodyPart();
		 messageBodyPart.setText(emailText);
		 
		 Multipart multipart = new MimeMultipart();
		 multipart.addBodyPart(messageBodyPart);

		 messageBodyPart = new MimeBodyPart();

//Anlage wird dem Emailbody hinzugefügt		 
		 messageBodyPart.setHeader("Content-Class", "urn:content-classes:calendarmessage");
		 messageBodyPart.setHeader("Content-ID","calendar_message");
		 messageBodyPart.setDataHandler(new DataHandler(
     	 new ByteArrayDataSource(attachement.toString(), "text/calendar")));
		 messageBodyPart.setFileName("iCal" + subject + "" + datum + ".ics");
		 
		 multipart.addBodyPart(messageBodyPart);

		 msg.setContent(multipart);

		 Transport.send( msg );
		
		} catch (Exception mex) {

			mex.printStackTrace();
		}
}
	
	private class SMTPAuthenticator extends javax.mail.Authenticator {
		public PasswordAuthentication getPasswordAuthentication() {
		return new PasswordAuthentication(sender, password);

		}	
	}

}